<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <title>Redis的数据类型和基本使用 | Zhaoxi Blooooooooog</title>
  <meta name="keywords" content=" redis ">
  <meta name="description" content="Redis的数据类型和基本使用 | Zhaoxi Blooooooooog">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="前言最近在重构代码, 为框架添加Autofac作为ioc容器, 在处理业务层时, 遇到不同Service相互依赖的问题, 俗称循环依赖. 后来经过讨论解决了这个问题, 这里记录一下我们的探索过程. 场景介绍A服务依赖于B服务作为构造函数的参数, B服务依赖于A服务作为构造函数的参数, demo代码如下:     public class ServiceA : IServiceA     {">
<meta name="keywords" content="ioc,循环依赖">
<meta property="og:type" content="article">
<meta property="og:title" content="ioc循环依赖的发现与解决">
<meta property="og:url" content="https://zhaoxiwork.gitee.io/zhaoxiwork.gitee.io/2019/09/16/ioc循环依赖的发现与解决/index.html">
<meta property="og:site_name" content="Zhaoxi Blooooooooog">
<meta property="og:description" content="前言最近在重构代码, 为框架添加Autofac作为ioc容器, 在处理业务层时, 遇到不同Service相互依赖的问题, 俗称循环依赖. 后来经过讨论解决了这个问题, 这里记录一下我们的探索过程. 场景介绍A服务依赖于B服务作为构造函数的参数, B服务依赖于A服务作为构造函数的参数, demo代码如下:     public class ServiceA : IServiceA     {">
<meta property="og:locale" content="zn-CN">
<meta property="og:updated_time" content="2019-09-18T13:14:07.356Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="ioc循环依赖的发现与解决">
<meta name="twitter:description" content="前言最近在重构代码, 为框架添加Autofac作为ioc容器, 在处理业务层时, 遇到不同Service相互依赖的问题, 俗称循环依赖. 后来经过讨论解决了这个问题, 这里记录一下我们的探索过程. 场景介绍A服务依赖于B服务作为构造函数的参数, B服务依赖于A服务作为构造函数的参数, demo代码如下:     public class ServiceA : IServiceA     {">


<link rel="icon" href="/img/avatar.jpg">

<link href="/css/style.css?v=1.0.1" rel="stylesheet">

<link href="/css/hl_theme/github.css?v=1.0.1" rel="stylesheet">

<link href="//cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="/js/jquery.autocomplete.min.js?v=1.0.1"></script>

<script src="//cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.bootcss.com/nprogress/0.2.0/nprogress.min.js"></script>



<script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

<script src="/js/iconfont.js?v=1.0.1"></script>

</head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="false">
  <input class="theme_blog_path" value>
</div>

<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.jpg" />
</a>
<div class="author">
    <span>Zhaoxi</span>
</div>

<div class="icon">
    
        
        <a title="github" href="https://github.com/zhao4xi" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-github"></use>
                </svg>
            
        </a>
        
    
        
        <a title="email" href="mailto:zhao4xi@126.com" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-email"></use>
                </svg>
            
        </a>
        
    
        
        <a title="qq" href="http://wpa.qq.com/msgrd?v=3&uin=517810353&site=qq&menu=yes" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-qq"></use>
                </svg>
            
        </a>
        
    
</div>




<ul>
    <li><div class="all active">全部文章<small>(21)</small></div></li>
    
        
            
            <li><div data-rel="数据库">数据库<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="Redis">Redis<small>(5)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="Spring">Spring<small>(4)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="协议">协议<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="Java">Java<small>(5)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="框架">框架<small>(1)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="算法">算法<small>(1)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a  class="friends">友链</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="21">
<input type="hidden" id="yelog_site_word_count" value="24.4k">
<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        友情链接
        <i class="back-title-list"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="http://yelog.org/">叶落阁</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <form onkeydown="if(event.keyCode==13){return false;}">
        <input class="search" type="text" placeholder="以 in: 开头进行全文搜索" autocomplete="off"id="local-search-input" >
        <i class="cross"></i>
        <span>
            <label for="tagswitch">Tags:</label>
            <input id="tagswitch" type="checkbox" style="display: none" />
            <i id="tagsWitchIcon"></i>
        </span>
    </form>
    <div class="tags-list">
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">MySQL</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">锁</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">redis</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color5">lock</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">spring</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">transaction</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">bean scope</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">Spring</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color4">tcp</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">spring mvc</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">ThreadLocal</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color5">http</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">https</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color4">ioc</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color5">循环依赖</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color4">aop</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color4">volatile</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">Thread Safe</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color1">Collection</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">Thread</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color2">Thread Pool</a>
    </li>
    
    <li class="article-tag-list-item">
        <a href="javascript:" class="color4">红黑树</a>
    </li>
    
    <div class="clearfix"></div>
</div>

    
    <div id="local-search-result">

    </div>
    
    <nav id="title-list-nav">
        
        <a  class="数据库 "
           href="/zhaoxiwork.gitee.io/2018/12/14/MySQL字段到底推不推荐使用null值/"
           data-tag="MySQL"
           data-author="" >
            <span class="post-title" title="MySQL字段到底推不推荐使用null值">MySQL字段到底推不推荐使用null值</span>
            <span class="post-date" title="2018-12-14 14:59:38">2018/12/14</span>
        </a>
        
        <a  class="数据库 "
           href="/zhaoxiwork.gitee.io/2019/01/03/Mysql实现乐观锁和悲观锁/"
           data-tag="MySQL,锁"
           data-author="" >
            <span class="post-title" title="MySQL实现乐观锁和悲观锁">MySQL实现乐观锁和悲观锁</span>
            <span class="post-date" title="2019-01-03 14:58:25">2019/01/03</span>
        </a>
        
        <a  class="Redis "
           href="/zhaoxiwork.gitee.io/2018/12/31/Redis为什么这么快之数据结构/"
           data-tag="redis"
           data-author="" >
            <span class="post-title" title="Redis为什么这么快之数据结构">Redis为什么这么快之数据结构</span>
            <span class="post-date" title="2018-12-31 15:15:35">2018/12/31</span>
        </a>
        
        <a  class="Redis "
           href="/zhaoxiwork.gitee.io/2019/01/03/Redis实现分布式锁/"
           data-tag="redis,lock"
           data-author="" >
            <span class="post-title" title="Redis实现分布式锁">Redis实现分布式锁</span>
            <span class="post-date" title="2019-01-03 15:17:22">2019/01/03</span>
        </a>
        
        <a  class="Redis "
           href="/zhaoxiwork.gitee.io/2019/01/01/Redis为什么这么快之服务器事件驱动/"
           data-tag="redis"
           data-author="" >
            <span class="post-title" title="Redis为什么这么快之服务器事件驱动">Redis为什么这么快之服务器事件驱动</span>
            <span class="post-date" title="2019-01-01 15:16:15">2019/01/01</span>
        </a>
        
        <a  class="Redis "
           href="/zhaoxiwork.gitee.io/2018/12/30/Redis的数据持久化方式/"
           data-tag="redis"
           data-author="" >
            <span class="post-title" title="Redis的数据持久化方式">Redis的数据持久化方式</span>
            <span class="post-date" title="2018-12-30 15:14:47">2018/12/30</span>
        </a>
        
        <a  class="Redis "
           href="/zhaoxiwork.gitee.io/2018/12/29/Redis的数据类型和基本使用/"
           data-tag="redis"
           data-author="" >
            <span class="post-title" title="Redis的数据类型和基本使用">Redis的数据类型和基本使用</span>
            <span class="post-date" title="2018-12-29 15:13:48">2018/12/29</span>
        </a>
        
        <a  class="Spring "
           href="/zhaoxiwork.gitee.io/2019/01/05/Spring-事务/"
           data-tag="spring,transaction"
           data-author="" >
            <span class="post-title" title="Spring 事务">Spring 事务</span>
            <span class="post-date" title="2019-01-05 14:49:55">2019/01/05</span>
        </a>
        
        <a  class="Spring "
           href="/zhaoxiwork.gitee.io/2018/12/26/Spring-Bean的作用域和生命周期/"
           data-tag="bean scope,Spring"
           data-author="" >
            <span class="post-title" title="Spring Bean的作用域和生命周期">Spring Bean的作用域和生命周期</span>
            <span class="post-date" title="2018-12-26 15:09:21">2018/12/26</span>
        </a>
        
        <a  class="协议 "
           href="/zhaoxiwork.gitee.io/2019/01/05/TCP-IP的三次握手和四次挥手/"
           data-tag="tcp"
           data-author="" >
            <span class="post-title" title="TCP/IP的三次握手和四次挥手">TCP/IP的三次握手和四次挥手</span>
            <span class="post-date" title="2019-01-05 14:51:46">2019/01/05</span>
        </a>
        
        <a  class="Spring "
           href="/zhaoxiwork.gitee.io/2018/12/27/Spring-MVC的请求处理流程/"
           data-tag="spring mvc"
           data-author="" >
            <span class="post-title" title="Spring MVC的请求处理流程">Spring MVC的请求处理流程</span>
            <span class="post-date" title="2018-12-27 15:11:12">2018/12/27</span>
        </a>
        
        <a  class="Java "
           href="/zhaoxiwork.gitee.io/2018/12/23/ThreadLocal使用场景及内存泄漏/"
           data-tag="ThreadLocal"
           data-author="" >
            <span class="post-title" title="ThreadLocal使用场景及内存泄漏">ThreadLocal使用场景及内存泄漏</span>
            <span class="post-date" title="2018-12-23 15:03:24">2018/12/23</span>
        </a>
        
        <a  class="协议 "
           href="/zhaoxiwork.gitee.io/2019/01/28/https和http的区别与比较/"
           data-tag="http,https"
           data-author="" >
            <span class="post-title" title="https和http的区别与比较">https和http的区别与比较</span>
            <span class="post-date" title="2019-01-28 09:37:25">2019/01/28</span>
        </a>
        
        <a  class="框架 "
           href="/zhaoxiwork.gitee.io/2019/09/16/ioc循环依赖的发现与解决/"
           data-tag="ioc,循环依赖"
           data-author="" >
            <span class="post-title" title="ioc循环依赖的发现与解决">ioc循环依赖的发现与解决</span>
            <span class="post-date" title="2019-09-16 10:30:51">2019/09/16</span>
        </a>
        
        <a  class=""
           href="/zhaoxiwork.gitee.io/2019/09/15/hello-world/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="Hello World">Hello World</span>
            <span class="post-date" title="2019-09-15 22:07:00">2019/09/15</span>
        </a>
        
        <a  class="Spring "
           href="/zhaoxiwork.gitee.io/2018/12/25/spring中的两种aop实现方式jdk动态代理和cglib代理/"
           data-tag="spring,aop"
           data-author="" >
            <span class="post-title" title="spring中的两种aop实现方式jdk动态代理和cglib代理">spring中的两种aop实现方式jdk动态代理和cglib代理</span>
            <span class="post-date" title="2018-12-25 15:07:32">2018/12/25</span>
        </a>
        
        <a  class="Java "
           href="/zhaoxiwork.gitee.io/2018/12/23/volatile的使用方法及一些注意事项/"
           data-tag="volatile"
           data-author="" >
            <span class="post-title" title="volatile的使用方法及一些注意事项">volatile的使用方法及一些注意事项</span>
            <span class="post-date" title="2018-12-23 15:04:16">2018/12/23</span>
        </a>
        
        <a  class="Java "
           href="/zhaoxiwork.gitee.io/2018/12/17/如何实现线程安全/"
           data-tag="Thread Safe"
           data-author="" >
            <span class="post-title" title="如何实现线程安全">如何实现线程安全</span>
            <span class="post-date" title="2018-12-17 15:01:54">2018/12/17</span>
        </a>
        
        <a  class="Java "
           href="/zhaoxiwork.gitee.io/2018/12/24/常用Map的比较与实现-jdk1-8/"
           data-tag="Collection"
           data-author="" >
            <span class="post-title" title="常用Map的比较与实现(jdk1.8+)">常用Map的比较与实现(jdk1.8+)</span>
            <span class="post-date" title="2018-12-24 15:05:34">2018/12/24</span>
        </a>
        
        <a  class="Java "
           href="/zhaoxiwork.gitee.io/2018/12/15/深入理解Java线程池/"
           data-tag="Thread,Thread Pool"
           data-author="" >
            <span class="post-title" title="深入理解Java线程池">深入理解Java线程池</span>
            <span class="post-date" title="2018-12-15 15:00:51">2018/12/15</span>
        </a>
        
        <a  class="算法 "
           href="/zhaoxiwork.gitee.io/2018/12/29/红黑树的实现原理及应用/"
           data-tag="红黑树"
           data-author="" >
            <span class="post-title" title="红黑树的实现原理及应用">红黑树的实现原理及应用</span>
            <span class="post-date" title="2018-12-29 15:12:44">2018/12/29</span>
        </a>
        
    </nav>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div class="post">
    <div class="pjax">
        <article id="post-Redis的数据类型和基本使用" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">Redis的数据类型和基本使用</h1>
    
    <div class="article-meta">
        
        
        
        <span class="book">
            
                <a href="javascript:" data-rel="Redis">Redis</a>
            
        </span>
        
        
        <span class="tag">
            
            <a href="javascript:" class="color1">redis</a>
            
        </span>
        
    </div>
    <div class="article-meta">
        
        创建时间:<time class="date" title='更新时间: 2019-09-21 15:14:24'>2018-12-29 15:13</time>
        
    </div>
    <div class="article-meta">
        
        <span>字数:3.2k</span>
        
        
        <span id="busuanzi_container_page_pv">
            阅读:<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#Redis简介及特点"><span class="toc-text">Redis简介及特点</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#Redis常用数据结构及使用"><span class="toc-text">Redis常用数据结构及使用</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#启动redis-server-win"><span class="toc-text">启动redis-server (win)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#使用redis-cli操作redis"><span class="toc-text">使用redis-cli操作redis</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#String-字符串常用操作"><span class="toc-text">String 字符串常用操作</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#Hash-哈希常用操作"><span class="toc-text">Hash 哈希常用操作</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#List-列表常用操作"><span class="toc-text">List 列表常用操作</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#Set-集合常用操作"><span class="toc-text">Set 集合常用操作</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#ZSet-有序集合常用操作"><span class="toc-text">ZSet 有序集合常用操作</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#简单总结"><span class="toc-text">简单总结</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#参考文献"><span class="toc-text">参考文献</span></a></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-3 i,
    .toc-level-3 ol {
        display: none !important;
    }
</style>
</div>
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="Redis简介及特点"><a href="#Redis简介及特点" class="headerlink" title="Redis简介及特点"></a>Redis简介及特点</h2><p>Redis是一个开源高效率的Key-Value内存数据库.</p>
<ul>
<li>支持多种数据结构 string, list, set, zset, hash, 并支持push, pop, 交并差集等多种操作, 并支持数据的持久化.</li>
<li>全内存操作, 性能极高, 官方数据: read高达 110000次/s, write高达 81000次/s.</li>
<li>操作原子性, 单操作原子性, 多操作使用MULTI和EXEC指令包裹执行保证原子性. </li>
<li>支持数据持久化.</li>
<li>支持数据publish/subscribe.</li>
<li>支持master-slaver(主从)同步, 集群操作.</li>
</ul>
<h2 id="Redis常用数据结构及使用"><a href="#Redis常用数据结构及使用" class="headerlink" title="Redis常用数据结构及使用"></a>Redis常用数据结构及使用</h2><h4 id="启动redis-server-win"><a href="#启动redis-server-win" class="headerlink" title="启动redis-server (win)"></a>启动redis-server (win)</h4><p>假设redis的目录是 e:\soft\redis</p>
<ol>
<li>命令行移动到redis运行目录: cd e:\soft\redis</li>
<li>启动服务端:  redis-server.exe redis.conf  (服务端exe 配置文件可选)</li>
</ol>
<h4 id="使用redis-cli操作redis"><a href="#使用redis-cli操作redis" class="headerlink" title="使用redis-cli操作redis"></a>使用redis-cli操作redis</h4><p>在redis运行目录执行: redis-cli -h 127.0.0.1 -p 6379  (-h, -p 默认参数就是127.0.0.1, 6379 可不写)</p>
<h4 id="String-字符串常用操作"><a href="#String-字符串常用操作" class="headerlink" title="String 字符串常用操作"></a>String 字符串常用操作</h4><ul>
<li>String 是最基础的Redis数据类型, 它是二进制安全的, 意味着String可以存储任何类型的数据, 例如jpeg图像和序列化对象. </li>
<li>单个String 的最大长度是512MB</li>
<li>绝大部分操作的复杂度是O(1), 返回多个元素除外.</li>
<li>使用场景探索: 常用来做数据缓存</li>
</ul>
<table>
<thead>
<tr>
<th align="left">String 命令</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">SET key value</td>
<td align="left">设置指定key value 的值</td>
</tr>
<tr>
<td align="left">GET key</td>
<td align="left">获取指定key 的值</td>
</tr>
<tr>
<td align="left">GETRANGE key start end</td>
<td align="left">返回指定key 的子串</td>
</tr>
<tr>
<td align="left">GETSET key value</td>
<td align="left">将给定key 的值设为value, 并返回key 的旧值(old value)</td>
</tr>
<tr>
<td align="left">GETBIT key offset</td>
<td align="left">对key 所储存的字符串值, 获取指定偏移量上的位(bit)</td>
</tr>
<tr>
<td align="left">MGET key1 key2 key3..</td>
<td align="left">根据给定的key 数组, 返回value 数组</td>
</tr>
<tr>
<td align="left">SETBIT key offset value</td>
<td align="left">对key 所储存的字符串值, 设置或清除指定偏移量上的位(bit)</td>
</tr>
<tr>
<td align="left">SETEX key seconds value</td>
<td align="left">将值 value 关联到key, 并将key 的过期时间设为 seconds (以秒为单位)</td>
</tr>
<tr>
<td align="left">SETNX key value</td>
<td align="left">只有在 key 不存在时设置key 的值</td>
</tr>
<tr>
<td align="left">SETRANGE key offset value</td>
<td align="left">用value 参数覆写给定key 所储存的字符串值, 从偏移量offset 开始</td>
</tr>
<tr>
<td align="left">STRLEN key</td>
<td align="left">返回key 所储存的字符串值的长度</td>
</tr>
<tr>
<td align="left">MSET key value [key value] […]</td>
<td align="left">同时设置一个或多个key-value 键值对</td>
</tr>
<tr>
<td align="left">MSETNX key value [key value] […]</td>
<td align="left">同时设置一个或多个key-value 对, 当且仅当所有给定key 都不存在</td>
</tr>
<tr>
<td align="left">PSETEX key milliseconds value</td>
<td align="left">将值value 关联到key , 并将key 的过期时间设为milliseconds (以毫秒为单位)</td>
</tr>
<tr>
<td align="left">INCR key</td>
<td align="left">将key 中存储的数字加1</td>
</tr>
<tr>
<td align="left">INCRBY key increment</td>
<td align="left">将key 所储存的值加上给定的增量值</td>
</tr>
<tr>
<td align="left">INCRBYFLOAT key increment</td>
<td align="left">将key 所储存的值加上给定的浮点增量值</td>
</tr>
<tr>
<td align="left">DECR key</td>
<td align="left">将key 中储存的数字值减1</td>
</tr>
<tr>
<td align="left">DECRBY key decrement</td>
<td align="left">对key 所储存的值减去给定的减量值</td>
</tr>
<tr>
<td align="left">APPEND key value</td>
<td align="left">如果key 已经存在并且是一个字符串,  APPEND 命令将指定的value 追加到该key 原来值（value）的末尾</td>
</tr>
</tbody></table>
<pre><code class="java">// 首先需要引入 Jedis 库, 启动redis 服务端
public static void main(String[] args) {
    Jedis jedis = new Jedis(&quot;127.0.0.1&quot;, 6379); // 服务器ip和端口
    System.out.print(jedis.set(&quot;name&quot;, &quot;zhaoxi&quot;)); // OK 
    System.out.println(&quot; &quot; + jedis.get(&quot;name&quot;)); // zhaoxi
    System.out.print(jedis.append(&quot;name&quot;, &quot;append&quot;)); // 12
    System.out.print(&quot; &quot; + jedis.get(&quot;name&quot;));  // zhaoxiappend
}</code></pre>
<h4 id="Hash-哈希常用操作"><a href="#Hash-哈希常用操作" class="headerlink" title="Hash 哈希常用操作"></a>Hash 哈希常用操作</h4><ul>
<li>Hash 是字符串的键值对, 所以方便存储对象</li>
<li>每个hash key最多存储 2^32 - 1 个键值对.</li>
<li>新增和删除都是O(1), 其他视命令而定</li>
<li>使用场景探索: 对象的直接缓存, 不通过String存储</li>
</ul>
<table>
<thead>
<tr>
<th align="left">Hash 命令</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">HDEL key field1 [field2]</td>
<td align="left">删除一个或多个哈希表字段</td>
</tr>
<tr>
<td align="left">HEXISTS key field</td>
<td align="left">查看哈希表 key 中, 指定的字段是否存在</td>
</tr>
<tr>
<td align="left">HGET key field</td>
<td align="left">获取存储在哈希表中指定字段的值</td>
</tr>
<tr>
<td align="left">HGETALL key</td>
<td align="left">获取在哈希表中指定 key 的所有字段和值</td>
</tr>
<tr>
<td align="left">HINCRBY key field increment</td>
<td align="left">为哈希表 key 中的指定字段的整数值加上增量 increment</td>
</tr>
<tr>
<td align="left">HINCRBYFLOAT key field increment</td>
<td align="left">为哈希表 key 中的指定字段的浮点数值加上增量 increment</td>
</tr>
<tr>
<td align="left">HKEYS key</td>
<td align="left">获取所有哈希表中的字段</td>
</tr>
<tr>
<td align="left">HLEN key</td>
<td align="left">获取哈希表中字段的数量</td>
</tr>
<tr>
<td align="left">HMGET key field1 [field2]</td>
<td align="left">获取所有给定字段的值</td>
</tr>
<tr>
<td align="left">HMSET key field1 value1 [field2 value2 ]</td>
<td align="left">同时将多个 field-value (域-值)对设置到哈希表 key 中</td>
</tr>
<tr>
<td align="left">HSET key field value</td>
<td align="left">将哈希表 key 中的字段 field 的值设为 value</td>
</tr>
<tr>
<td align="left">HSETNX key field value</td>
<td align="left">只有在字段 field 不存在时, 设置哈希表字段的值</td>
</tr>
<tr>
<td align="left">HVALS key</td>
<td align="left">获取哈希表中所有值</td>
</tr>
<tr>
<td align="left">HSCAN key cursor [MATCH pattern] [COUNT count]</td>
<td align="left">迭代哈希表中的键值对</td>
</tr>
</tbody></table>
<pre><code class="java">// 首先需要引入 Jedis 库, 启动redis 服务端
public static void main(String[] args) {
    Jedis jedis = new Jedis(&quot;127.0.0.1&quot;, 6379); // 服务器ip和端口
    System.out.print(jedis.hset(&quot;user&quot;, &quot;name&quot;, &quot;zhaoxi&quot;)); // 1
    System.out.println(&quot; &quot; + jedis.hset(&quot;user&quot;, &quot;desc&quot;, &quot;pr&quot;)); // 1
    System.out.print(jedis.hget(&quot;user&quot;, &quot;name&quot;)); // zhaoxi
    System.out.println(&quot; &quot; + jedis.hget(&quot;user&quot;, &quot;desc&quot;)); // pr
} </code></pre>
<h4 id="List-列表常用操作"><a href="#List-列表常用操作" class="headerlink" title="List 列表常用操作"></a>List 列表常用操作</h4><ul>
<li>List 是字符串的列表(Linked List), 按照插入顺序排序. 每个字符串首尾指向前后一个字符串.</li>
<li>单个 List 的最大长度是 2^32 - 1</li>
<li>Redis 从首尾插入删除元素复杂度恒定为O(1), 从首尾访问元素复杂度也是O(1), 但是访问很大的列表时, 速度很慢, 复杂度为O(n) </li>
<li>使用场景探索: 配合lpush 和ltrim , 监测一个用户最近访问的最新n 个值</li>
</ul>
<table>
<thead>
<tr>
<th align="left">List 命令</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">BLPOP key1 [key2 ] timeout</td>
<td align="left">移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止</td>
</tr>
<tr>
<td align="left">BRPOP key1 [key2 ] timeout</td>
<td align="left">移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止</td>
</tr>
<tr>
<td align="left">BRPOPLPUSH source destination timeout</td>
<td align="left">从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它； 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止</td>
</tr>
<tr>
<td align="left">LINDEX key index</td>
<td align="left">通过索引获取列表中的元素</td>
</tr>
<tr>
<td align="left">LINSERT key BEFORE</td>
<td align="left">AFTER pivot value</td>
</tr>
<tr>
<td align="left">LLEN key</td>
<td align="left">获取列表长度</td>
</tr>
<tr>
<td align="left">LPOP key</td>
<td align="left">移出并获取列表的第一个元素</td>
</tr>
<tr>
<td align="left">LPUSH key value1 [value2]</td>
<td align="left">将一个或多个值插入到列表头部</td>
</tr>
<tr>
<td align="left">LPUSHX key value</td>
<td align="left">将一个值插入到已存在的列表头部</td>
</tr>
<tr>
<td align="left">LRANGE key start stop</td>
<td align="left">获取列表指定范围内的元素</td>
</tr>
<tr>
<td align="left">LREM key count value</td>
<td align="left">移除列表元素</td>
</tr>
<tr>
<td align="left">LSET key index value</td>
<td align="left">通过索引设置列表元素的值</td>
</tr>
<tr>
<td align="left">LTRIM key start stop</td>
<td align="left">对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除</td>
</tr>
<tr>
<td align="left">RPOP key</td>
<td align="left">移除列表的最后一个元素,返回值为移除的元素</td>
</tr>
<tr>
<td align="left">RPOPLPUSH source destination</td>
<td align="left">移除列表的最后一个元素,并将该元素添加到另一个列表并返回</td>
</tr>
<tr>
<td align="left">RPUSH key value1 [value2]</td>
<td align="left">在列表中添加一个或多个值</td>
</tr>
<tr>
<td align="left">RPUSHX key value</td>
<td align="left">为已存在的列表添加值</td>
</tr>
</tbody></table>
<pre><code class="java">// 首先需要引入 Jedis 库, 启动redis 服务端
public static void main(String[] args) {
    Jedis jedis = new Jedis(&quot;127.0.0.1&quot;, 6379);
    System.out.println(jedis.lpush(&quot;list&quot;, &quot;index1&quot;)); // 1
    System.out.println(jedis.lpush(&quot;list&quot;, &quot;index2&quot;)); // 2
    System.out.println(jedis.lpush(&quot;list&quot;, &quot;index3&quot;)); // 3
    System.out.println(jedis.lrem(&quot;list&quot;, 1, &quot;index1&quot;)); // 1
    System.out.println(jedis.lrange(&quot;list&quot;, 0, -1)); // [index3, index2]
    System.out.println(jedis.lpop(&quot;list&quot;)); // index3
    System.out.println(jedis.lpop(&quot;list&quot;));  // index2
    System.out.println(jedis.lrange(&quot;list&quot;, 0, -1)); // []
}</code></pre>
<h4 id="Set-集合常用操作"><a href="#Set-集合常用操作" class="headerlink" title="Set 集合常用操作"></a>Set 集合常用操作</h4><ul>
<li>Set 是不允许重复切无序的列表</li>
<li>单个 Set 的最大成员数 2^32 - 1个</li>
<li>向 Set 中添加, 删除, 检测元素存在时间复杂度都是O(1)</li>
<li>使用场景探索: 监测一个帖子的访问ip 地址, 每次访问的时候直接将ip 插入到set, 不用担心唯一的问题.</li>
</ul>
<table>
<thead>
<tr>
<th align="left">Set 命令</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">SADD key member1 [member2]</td>
<td align="left">向集合添加一个或多个成员</td>
</tr>
<tr>
<td align="left">SCARD key</td>
<td align="left">获取集合的成员数</td>
</tr>
<tr>
<td align="left">SDIFF key1 [key2]</td>
<td align="left">返回给定所有集合的差集</td>
</tr>
<tr>
<td align="left">SDIFFSTORE destination key1 [key2]</td>
<td align="left">返回给定所有集合的差集并存储在 destination 中</td>
</tr>
<tr>
<td align="left">SINTER key1 [key2]</td>
<td align="left">返回给定所有集合的交集</td>
</tr>
<tr>
<td align="left">SINTERSTORE destination key1 [key2]</td>
<td align="left">返回给定所有集合的交集并存储在 destination 中</td>
</tr>
<tr>
<td align="left">SISMEMBER key member</td>
<td align="left">判断 member 元素是否是集合 key 的成员</td>
</tr>
<tr>
<td align="left">SMEMBERS key</td>
<td align="left">返回集合中的所有成员</td>
</tr>
<tr>
<td align="left">SMOVE source destination member</td>
<td align="left">将 member 元素从 source 集合移动到 destination 集合</td>
</tr>
<tr>
<td align="left">SPOP key</td>
<td align="left">移除并返回集合中的一个随机元素</td>
</tr>
<tr>
<td align="left">SRANDMEMBER key [count]</td>
<td align="left">返回集合中一个或多个随机数</td>
</tr>
<tr>
<td align="left">SREM key member1 [member2]</td>
<td align="left">移除集合中一个或多个成员</td>
</tr>
<tr>
<td align="left">SUNION key1 [key2]</td>
<td align="left">返回所有给定集合的并集</td>
</tr>
<tr>
<td align="left">SUNIONSTORE destination key1 [key2]</td>
<td align="left">所有给定集合的并集存储在 destination 集合中</td>
</tr>
<tr>
<td align="left">SSCAN key cursor [MATCH pattern] [COUNT count]</td>
<td align="left">迭代集合中的元素</td>
</tr>
</tbody></table>
<pre><code class="java">// 首先需要引入 Jedis 库, 启动redis 服务端
public static void main(String[] args) {
    Jedis jedis = new Jedis(&quot;127.0.0.1&quot;, 6379);
    System.out.println(jedis.sadd(&quot;set#name#1&quot;, &quot;zhaoxi&quot;, &quot;wuyu&quot;, &quot;mailang&quot;)); // 3
    System.out.println(jedis.sadd(&quot;set#name#1&quot;, &quot;zhaoxi&quot;)); // 0  说明已存在
    System.out.println(jedis.sadd(&quot;set#name#2&quot;, &quot;zhaoxi&quot;,&quot;yiyi&quot;)); // 2
    System.out.println(jedis.sdiff(&quot;set#name#2&quot;, &quot;set#name#1&quot;)); // [yiyi]
    System.out.println(jedis.sinter(&quot;set#name#2&quot;, &quot;set#name#1&quot;)); // [zhaoxi]
    System.out.println(jedis.sunion(&quot;set#name#2&quot;, &quot;set#name#1&quot;)); // [wuyu, mailang, zhaoxi, yiyi] 
    System.out.println(jedis.del(&quot;set#name#2&quot;, &quot;set#name#1&quot;)); // 2
}</code></pre>
<h4 id="ZSet-有序集合常用操作"><a href="#ZSet-有序集合常用操作" class="headerlink" title="ZSet 有序集合常用操作"></a>ZSet 有序集合常用操作</h4><ul>
<li>ZSet 类似 Set 和 Hash 的混合体. </li>
<li>每个有序元素都和一个浮点数(分数)相关联.</li>
<li>添加,删除,查找的复杂度都是O(1)</li>
<li>使用场景探索: 游戏中的排名, 榜单.</li>
</ul>
<table>
<thead>
<tr>
<th align="left">ZSet 命令</th>
<th align="left">描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">ZADD key score1 member1 [score2 member2]</td>
<td align="left">向有序集合添加一个或多个成员,或者更新已存在成员的分数</td>
</tr>
<tr>
<td align="left">ZCARD key</td>
<td align="left">获取有序集合的成员数</td>
</tr>
<tr>
<td align="left">ZCOUNT key min max</td>
<td align="left">计算在有序集合中指定区间分数的成员数</td>
</tr>
<tr>
<td align="left">ZINCRBY key increment member</td>
<td align="left">有序集合中对指定成员的分数加上增量 increment</td>
</tr>
<tr>
<td align="left">ZINTERSTORE destination numkeys key [key …]</td>
<td align="left">计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中</td>
</tr>
<tr>
<td align="left">ZLEXCOUNT key min max</td>
<td align="left">在有序集合中计算指定字典区间内成员数量</td>
</tr>
<tr>
<td align="left">ZRANGE key start stop [WITHSCORES]</td>
<td align="left">通过索引区间返回有序集合成指定区间内的成员</td>
</tr>
<tr>
<td align="left">ZRANGEBYLEX key min max [LIMIT offset count]</td>
<td align="left">通过字典区间返回有序集合的成员</td>
</tr>
<tr>
<td align="left">ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]</td>
<td align="left">通过分数返回有序集合指定区间内的成员</td>
</tr>
<tr>
<td align="left">ZRANK key member</td>
<td align="left">返回有序集合中指定成员的索引</td>
</tr>
<tr>
<td align="left">ZREM key member [member …]</td>
<td align="left">移除有序集合中的一个或多个成员</td>
</tr>
<tr>
<td align="left">ZREMRANGEBYLEX key min max</td>
<td align="left">移除有序集合中给定的字典区间的所有成员</td>
</tr>
<tr>
<td align="left">ZREMRANGEBYRANK key start stop</td>
<td align="left">移除有序集合中给定的排名区间的所有成员</td>
</tr>
<tr>
<td align="left">ZREMRANGEBYSCORE key min max</td>
<td align="left">移除有序集合中给定的分数区间的所有成员</td>
</tr>
<tr>
<td align="left">ZREVRANGE key start stop [WITHSCORES]</td>
<td align="left">返回有序集中指定区间内的成员,通过索引,分数从高到底</td>
</tr>
<tr>
<td align="left">ZREVRANGEBYSCORE key max min [WITHSCORES]</td>
<td align="left">返回有序集中指定分数区间内的成员,分数从高到低排序</td>
</tr>
<tr>
<td align="left">ZREVRANK key member</td>
<td align="left">返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序</td>
</tr>
<tr>
<td align="left">ZSCORE key member</td>
<td align="left">返回有序集中,成员的分数值</td>
</tr>
<tr>
<td align="left">ZUNIONSTORE destination numkeys key [key …]</td>
<td align="left">计算给定的一个或多个有序集的并集,并存储在新的 key 中</td>
</tr>
<tr>
<td align="left">ZSCAN key cursor [MATCH pattern] [COUNT count]</td>
<td align="left">迭代有序集合中的元素（包括元素成员和元素分值）</td>
</tr>
</tbody></table>
<pre><code class="java">// 首先需要引入 Jedis 库, 启动redis 服务端
public static void main(String[] args) {
    Jedis jedis = new Jedis(&quot;127.0.0.1&quot;, 6379);
    System.out.println(jedis.zadd(&quot;zset#score#181229&quot;, 10, &quot;zhaoxi&quot;)); // 1
    System.out.println(jedis.zadd(&quot;zset#score#181229&quot;, 20, &quot;yiyi&quot;)); // 1
    System.out.println(jedis.zadd(&quot;zset#score#181229&quot;, 30, &quot;wuyu&quot;)); // 1
    System.out.println(jedis.zcard(&quot;zset#score#181229&quot;)); // 3
    System.out.println(jedis.zincrby(&quot;zset#score#181229&quot;,5,&quot;zhaoxi&quot;)); // 15.0
    System.out.println(jedis.zrevrange(&quot;zset#score#181229&quot;, 0, -1)); // [wuyu, yiyi, zhaoxi]
    System.out.println(jedis.del(&quot;zset#score#181229&quot;)); //1
}</code></pre>
<h2 id="简单总结"><a href="#简单总结" class="headerlink" title="简单总结"></a>简单总结</h2><p>Redis 的数据结构丰富, 为 Redis 提供了丰富的应用场景. 所以非常受欢迎, 使用中熟练掌握所有结构, 能让我们工作如虎添翼.</p>
<h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><ul>
<li>菜鸟教程 <a href="http://www.runoob.com/redis/redis-tutorial.html" target="_blank" rel="noopener">http://www.runoob.com/redis/redis-tutorial.html</a></li>
<li>Redis官网 <a href="https://redis.io/" target="_blank" rel="noopener">https://redis.io/</a> </li>
</ul>

      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 zhao4xi@126.com </span>
    </div>
</article>



<div class="article_copyright">
    <p><span class="copy-title">文章标题:</span>Redis的数据类型和基本使用</p>
    <p><span class="copy-title">文章字数:</span><span class="post-count">3.2k</span></p>
    <p><span class="copy-title">本文作者:</span><a href="javascript:void(0)" title="Zhaoxi">Zhaoxi</a></p>
    <p><span class="copy-title">发布时间:</span>2018-12-29, 15:13:48</p>
    <p><span class="copy-title">最后更新:</span>2019-09-21, 15:14:24</p>
    <span class="copy-title">原始链接:</span><a class="post-url" href="/zhaoxiwork.gitee.io/2018/12/29/Redis的数据类型和基本使用/" title="Redis的数据类型和基本使用">https://zhaoxiwork.gitee.io/zhaoxiwork.gitee.io/2018/12/29/Redis的数据类型和基本使用/</a>
    <p>
        <span class="copy-title">版权声明:</span><i class="fa fa-creative-commons"></i> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" title="CC BY-NC-SA 4.0 International" target = "_blank">"署名-非商用-相同方式共享 4.0"</a> 转载请保留原文链接及作者。
    </p>
</div>





    




    </div>
    <div class="copyright">
        <p class="footer-entry">©2016-2019 Zhaoxi</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full"><span class="min "></span></button>
<button class="post-toc-menu"><span class="post-toc-menu-icons"></span></button>
<div class="post-toc"><span class="post-toc-title">目录</span>
    <div class="post-toc-content">

    </div>
</div>
<a class="" id="rocket" href="javascript:void(0)"></a>
    </div>
</div>
<div class="acParent"></div>

</body>
<script src="/js/jquery.pjax.js?v=1.0.1" ></script>

<script src="/js/script.js?v=1.0.1" ></script>
<script>
    var img_resize = 'default';
    /*作者、标签的自动补全*/
    $(function () {
        $('.search').AutoComplete({
            'data': ['#MySQL','#锁','#redis','#lock','#spring','#transaction','#bean scope','#Spring','#tcp','#spring mvc','#ThreadLocal','#http','#https','#ioc','#循环依赖','#aop','#volatile','#Thread Safe','#Collection','#Thread','#Thread Pool','#红黑树',],
            'itemHeight': 20,
            'width': 418
        }).AutoComplete('show');
    })
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $(".post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        

        /*高亮代码块行号*/
        
        $('pre code').each(function(){
            var lines = $(this).text().split('\n').length - 1, widther='';
            if (lines>99) {
                widther = 'widther'
            }
            var $numbering = $('<ul/>').addClass('pre-numbering ' + widther).attr("unselectable","on");
            $(this).addClass('has-numbering ' + widther)
                    .parent()
                    .append($numbering);
            for(var i=1;i<=lines;i++){
                $numbering.append($('<li/>').text(i));
            }
        });
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
    }

    /*打赏页面隐藏与展示*/
    

</script>

<!--加入行号的高亮代码块样式-->

<style>
    pre{
        position: relative;
        margin-bottom: 24px;
        border-radius: 10px;
        border: 1px solid #e2dede;
        background: #FFF;
        overflow: hidden;
    }
    code.has-numbering{
        margin-left: 30px;
    }
    code.has-numbering.widther{
        margin-left: 35px;
    }
    .pre-numbering{
        margin: 0px;
        position: absolute;
        top: 0;
        left: 0;
        width: 20px;
        padding: 0.5em 3px 0.7em 5px;
        border-right: 1px solid #C3CCD0;
        text-align: right;
        color: #AAA;
        background-color: ;
    }
    .pre-numbering.widther {
        width: 35px;
    }
</style>

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
        .nav .hide-list.fullscreen {
            left: 492px
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    
    .post .pjax article .article-entry>ol, .post .pjax article .article-entry>ul, .post .pjax article>ol, .post .pjax article>ul{
        border: #e2dede solid 1px;
        border-radius: 10px;
        padding: 10px 32px 10px 56px;
    }
    .post .pjax article .article-entry li>ol, .post .pjax article .article-entry li>ul,.post .pjax article li>ol, .post .pjax article li>ul{
        padding-top: 5px;
        padding-bottom: 5px;
    }
    .post .pjax article .article-entry>ol>li, .post .pjax article .article-entry>ul>li,.post .pjax article>ol>li, .post .pjax article>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    .post .pjax article .article-entry li>ol>li, .post .pjax article .article-entry li>ul>li,.post .pjax article li>ol>li, .post .pjax article li>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    
    .nav-right:before {
        content: ' ';
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        opacity: 0.3;
        background: url("https://i.loli.net/2019/07/22/5d3521411f3f169375.png");
        background-repeat: no-repeat;
        background-position: 50% 0;
        -ms-background-size: cover;
        -o-background-size: cover;
        -moz-background-size: cover;
        -webkit-background-size: cover;
        background-size: cover;
    }
    

    
</style>







</html>
